index.tsx 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424
  1. "use client";
  2. import { usePathname, useRouter } from "@/i18n/routing";
  3. import { Popup, Tabs } from "antd-mobile";
  4. import { useTranslations } from "next-intl";
  5. import Image from "next/image";
  6. import { FC, ReactNode, useState } from "react";
  7. interface Props {}
  8. interface LevelProps {
  9. url: string;
  10. level: string;
  11. body: ReactNode;
  12. footer: ReactNode;
  13. }
  14. const LevelCard: FC<LevelProps> = (props) => {
  15. const { url, level, body, footer } = props;
  16. return (
  17. <div className={"relative"}>
  18. <div
  19. className={
  20. "absolute left-1/2 -translate-x-1/2 rounded-[0.1389rem]" +
  21. " border-[1px]" +
  22. " w-[0.8333rem] border-[#00a1f5]"
  23. }
  24. >
  25. <Image
  26. src={url}
  27. alt={""}
  28. className={"rounded-[0.1389rem]"}
  29. width={130}
  30. height={100}
  31. />
  32. <div
  33. className={
  34. "absolute bottom-[0.0208rem] right-[0.0347rem] h-[0.1806rem] w-[0.1806rem] rounded" +
  35. " flex items-center justify-center bg-[#00a1f5] text-[0.0972rem] font-black"
  36. }
  37. >
  38. {level}
  39. </div>
  40. </div>
  41. <div
  42. className={
  43. "mt-[0.6944rem] rounded-[0.0694rem] border-[1px] border-[#22343e] pt-[0.2083rem]" +
  44. " px-[0.0694rem] text-center"
  45. }
  46. >
  47. {body}
  48. <div className={"-mx-[0.0694rem] border-t-[1px] border-[#22343e] py-[0.0694rem]"}>
  49. {footer}
  50. </div>
  51. </div>
  52. </div>
  53. );
  54. };
  55. export const CommissionModel: FC<{ visible: boolean; setVisible: (value: boolean) => void }> = (
  56. props
  57. ) => {
  58. const { visible, setVisible } = props;
  59. return (
  60. <Popup
  61. visible={visible}
  62. getContainer={null}
  63. onMaskClick={() => {
  64. setVisible(false);
  65. }}
  66. position="right"
  67. bodyStyle={{ width: "100%" }}
  68. >
  69. <div className={"h-[100%] w-[100%] overflow-scroll bg-[#0e1b22]"}>
  70. <div
  71. className={
  72. "absolute top-0 flex items-center justify-between " +
  73. " h-[0.4167rem] w-[100%] border-[1px] bg-[#17181c] px-[0.1389rem]" +
  74. " z-10 border-[#666]"
  75. }
  76. >
  77. <p>Regras de cálculo de comissão</p>
  78. <i className={"iconfont icon-guanbi"} onClick={() => setVisible(false)}></i>
  79. </div>
  80. {/*body*/}
  81. <div className={"mt-[0.4167rem] px-[0.1389rem] pt-[0.1389rem]"}>
  82. <div className={"rounded-[5px] border-[1px] border-[#22343e] p-[0.0694rem]"}>
  83. <div className={"flex items-center"}>
  84. <div className={"relative ml-[0.0694rem]"}>
  85. <Image
  86. src={"/avatar/1.png"}
  87. alt={""}
  88. className={"rounded-[0.1389rem] border-[2px] border-[#e5811d]"}
  89. width={168}
  90. height={168}
  91. />
  92. <div
  93. className={
  94. "absolute bottom-[0.0347rem] right-[0.0556rem]" +
  95. " w-[0.2778rem]" +
  96. " flex h-[0.2778rem] rounded-[50%] bg-[#e5811d]" +
  97. " items-center justify-center"
  98. }
  99. >
  100. A
  101. </div>
  102. </div>
  103. <div className={"ml-[0.2083rem] text-[#465f80]"}>
  104. <p> O C3 é poderoso e também possui </p>
  105. <span className={"text-[#e5811d]"}>110</span>
  106. <span>/million</span>
  107. </div>
  108. </div>
  109. <div className={"mt-[0.1389rem]"}>
  110. Desempenho total 3,31M, Bônus total do agente{" "}
  111. <span className={"text-[#e5811d]"}>2500</span>
  112. </div>
  113. <div>
  114. Desempenho de subordinado 180K, Contribuiu
  115. <span className={"text-[#e5811d]"}> 1980</span>
  116. </div>
  117. <div className={"text-center"}>
  118. Outro desempenho 3,13M, Contribuir
  119. <span className={"text-[#e5811d]"}> 520</span>
  120. </div>
  121. </div>
  122. <div className={"mt-[0.1042rem] grid grid-cols-3"}>
  123. <Image
  124. src={"/avatar/right.png"}
  125. alt={""}
  126. width={80}
  127. className={"justify-self-end"}
  128. height={200}
  129. />
  130. <Image
  131. src={"/avatar/up.png"}
  132. className={"justify-self-center"}
  133. alt={""}
  134. width={23}
  135. height={100}
  136. />
  137. <Image src={"/avatar/left.png"} alt={""} width={80} height={200} />
  138. </div>
  139. <div className={"grid grid-cols-3 text-[0.0972rem]"}>
  140. <div className={"text-center"}>
  141. <p>Contribuição de B1:</p>
  142. <p className={"text-center text-[#e5811d]"}>1320</p>
  143. <p>
  144. Outras contribuições de C1 e C2:{" "}
  145. <span className={"text-[#e5811d]"}>520</span>{" "}
  146. </p>
  147. </div>
  148. <div className={"text-center"}>
  149. <p> Contribuir para A: </p>
  150. <p className={"text-[#e5811d]"}>440</p>
  151. </div>
  152. <div className={"text-center"}>
  153. <p> Contribuição de B3: </p>
  154. <p className={"text-[#e5811d]"}>220</p>
  155. <p>
  156. Outras contribuições de C3:
  157. <span className={"text-[#e5811d]"}> 0</span>
  158. </p>
  159. </div>
  160. </div>
  161. <div className={"mt-[3px] grid grid-cols-3 gap-[0.1389rem]"}>
  162. <LevelCard
  163. url={"/avatar/2.png"}
  164. level={"B1"}
  165. body={
  166. <div className={"text-[#495b73]"}>
  167. Subagente ganha, geralmente
  168. <p>
  169. <span className={"text-[#e5811d]"}>70</span> /10K
  170. </p>
  171. </div>
  172. }
  173. footer={<p>Apostas válidas 120K</p>}
  174. />
  175. <LevelCard
  176. url={"/avatar/3.png"}
  177. level={"B2"}
  178. body={
  179. <div className={"text-[#495b73]"}>
  180. B2 não tem subordinados, por isso não tem lucros
  181. </div>
  182. }
  183. footer={<p>Apostas válidas 120K</p>}
  184. />
  185. <LevelCard
  186. url={"/avatar/4.png"}
  187. level={"B3"}
  188. body={
  189. <div className={"text-[#495b73]"}>
  190. Muito bem subagente, ganhou
  191. <p>
  192. <span className={"text-[#e5811d]"}>110</span> /10K
  193. </p>
  194. </div>
  195. }
  196. footer={<p>Apostas válidas 20K</p>}
  197. />
  198. </div>
  199. <div className={"mt-[0.0347rem] grid grid-cols-3"}>
  200. <Image
  201. src={"/avatar/up.png"}
  202. alt={""}
  203. width={25}
  204. className={"justify-self-center"}
  205. height={100}
  206. />
  207. <div className={"relative"}>
  208. <Image
  209. src={"/avatar/left.png"}
  210. alt={""}
  211. width={80}
  212. className={
  213. "absolute -left-[0.2778rem] top-0 h-[100%]" +
  214. "w-[0.4722rem] transition"
  215. }
  216. height={100}
  217. />
  218. </div>
  219. <Image
  220. src={"/avatar/up.png"}
  221. alt={""}
  222. width={25}
  223. className={"justify-self-center"}
  224. height={100}
  225. />
  226. </div>
  227. <div className={"grid grid-cols-3 text-[0.0972rem]"}>
  228. <div className={"text-center"}>
  229. <p>Contribuir para A:</p>
  230. <p className={"text-center text-[#e5811d]"}>400</p>
  231. <p>Contribuir para B1: </p>
  232. <p className={"text-[#e5811d]"}>700</p>
  233. </div>
  234. <div className={"text-center"}>
  235. <p> Contribuir para A: </p>
  236. <p className={"text-[#e5811d]"}>120</p>
  237. <p>Contribuir para B1:</p>
  238. <p className={"text-[#e5811d]"}>210</p>
  239. </div>
  240. <div className={"text-center"}>
  241. <p> Contribuir para A: </p>
  242. <p className={"text-[#e5811d]"}>220</p>
  243. <p>Contribuir para B3:</p>
  244. <p className={"text-[#e5811d]"}> 0</p>
  245. </div>
  246. </div>
  247. <div className={"mt-[3px] grid grid-cols-3 gap-[0.1389rem]"}>
  248. <LevelCard
  249. url={"/avatar/5.png"}
  250. level={"B1"}
  251. body={
  252. <div className={"text-[#495b73]"}>
  253. C1 não tem subordinados, por isso não tem lucros
  254. </div>
  255. }
  256. footer={<p>Apostas válidas 100K</p>}
  257. />
  258. <LevelCard
  259. url={"/avatar/6.png"}
  260. level={"B2"}
  261. body={
  262. <div className={"text-[#495b73]"}>
  263. <div data-v-a24e5faa="" className="desc-txt">
  264. {" "}
  265. C2 não tem subordinados, por isso não tem lucros
  266. </div>
  267. </div>
  268. }
  269. footer={<p>Apostas válidas 30K</p>}
  270. />
  271. <LevelCard
  272. url={"/avatar/7.png"}
  273. level={"B3"}
  274. body={
  275. <div className={"text-[#495b73]"}>
  276. C3 não tem subordinados, por isso não tem lucros
  277. </div>
  278. }
  279. footer={<p>Apostas válidas 3000K</p>}
  280. />
  281. </div>
  282. <div className={"mt-[5px]"}>
  283. <p>Por exemplo:</p>
  284. <p>
  285. Neste website o bónus do agente é calculado por apostas. Por exemplo, se
  286. as apostas forem 10-200000, a taxa de bónus correspondente será
  287. 70/10000, e se as apostas forem superiores a 3000000, o bónus de agente
  288. é 110/10000. A é o agente do website, ele recruta B1, B2 e B3 como seus
  289. agentes e B1 também recruta C1 e C2 como seus agentes. B2 não tem
  290. agentes e B3 tem apenas um agente C3. Alguns dias depois, a aposta
  291. efetiva do próprio B1 é de 120.000, a aposta efetiva de B2 é de 40.000,
  292. as apostas efetivas de B3 são 20.000, as apostas efetivas do C1 são
  293. 100.000, as apostas efetivas do C2 são 30.000, C3 Eu tenho 3 milhões de
  294. apostas eficazes, Em seguida, o desempenho total de B1 vem de 130.000 de
  295. C1 e C2, e a taxa de retorno da comissão correspondente é 70/10.000; B2
  296. não tem desempenho subordinado 0; a taxa de retorno da comissão é
  297. 110/10.000; a tem 180.000 do Equipe direta e 3,13 milhões de outras
  298. equipes, com um desempenho total de 3,31 milhões, e a taxa de retorno
  299. correspondente é 110/10.000.{" "}
  300. </p>
  301. <p>Por conseguinte, o bónus é calculado da seguinte forma:</p>
  302. <p>
  303. 1. Equipa direta: refere-se aos membros do desenvolvimento vertical, que
  304. são coletivamente chamados de equipa direta.{" "}
  305. </p>
  306. <p>
  307. (1) B1, B2, B3 contribuem para A: (120000+40000+20000)x110/10000=1980.{" "}
  308. </p>
  309. <p> (2) C1 e C2 contribuem para B1:(100000+30000)x70/10000=910. </p>
  310. <p>(3) C3 contribui para B3: 3 milhões x 110/10000=33000.</p>
  311. <p>
  312. 2. Outras equipas: refere-se aos membros do desenvolvimento de
  313. subordinados, subordinados, etc., que são coletivamente chamados de
  314. outras equipas; porque este sistema pode desenvolver subordinados
  315. indefinidamente, para melhor compreensão, este artigo apenas toma como
  316. exemplo uma estrutura de 2 níveis.{" "}
  317. </p>
  318. <p>
  319. (1) De C1 e C2: Visto que o desempenho total de B1 é de 130000, tem
  320. apenas uma taxa de desconto de 70/10000, enquanto que o desempenho total
  321. de A é de 3,31 milhões, e tem uma taxa de desconto de 110/10000. Então a
  322. diferença de desconto entre A e B1 é de: 110-70=40/100000, esta
  323. diferença é a parte contribuída por C1 e C2 para A, portanto C1 e C2
  324. contribuem para A: (100000+30000)×40/10000=520.{" "}
  325. </p>
  326. <p>
  327. 2. Outras equipas: refere-se aos membros do desenvolvimento de
  328. subordinados, subordinados, etc., que são coletivamente chamados de
  329. outras equipas; porque este sistema pode desenvolver subordinados
  330. indefinidamente, para melhor compreensão, este artigo apenas toma como
  331. exemplo uma estrutura de 2 níveis.{" "}
  332. </p>
  333. <p>3. Resumo:</p>
  334. <p>
  335. (1) C3 é poderoso, indiretamente permite que todo o desempenho de A
  336. desfrute de uma proporção maior de retornos da comissão.{" "}
  337. </p>
  338. <p>
  339. (2) B2 pode ser preguiçoso, e não tem vantagem se não houver
  340. desenvolvimento de subordinados.{" "}
  341. </p>
  342. <p>
  343. (3) Apesar de B3 se ter juntado relativamente tarde e pertencer aos
  344. subordinados de A, o seu subordinado C3 é poderoso, permitindo que B3
  345. desfrute diretamente da mais alta taxa de desconto, e A não pode ganhar
  346. diretamente a diferença de B3. Por isso, de quem é a posição de B3
  347. quando este se junta? Os benefícios dos subordinados, independentemente
  348. do nível em que se encontrem, nunca serão afetados, deixarão de sofrer
  349. as perdas de outros subordinados, e o seu desenvolvimento não será
  350. restringido.
  351. </p>
  352. <p>
  353. (4) Este é um modelo de agência absolutamente justo, e não prejudicará
  354. sempre quem se juntar mais tarde.
  355. </p>
  356. </div>
  357. </div>
  358. </div>
  359. </Popup>
  360. );
  361. };
  362. const App: FC<Props> = (props) => {
  363. const pathname = usePathname();
  364. const t = useTranslations("TabsCom");
  365. const router = useRouter();
  366. const activeTab = pathname.split("/").at(-1);
  367. const [visible, setVisible] = useState(false);
  368. const tabs = [
  369. { id: 1, page: "summary", content: t("PAINEL"), x: 0.27 },
  370. { id: 2, page: "referrals", content: t("REFERÊNCIAS"), x: 0.93 },
  371. { id: 3, page: "report", content: t("RELATÓRIO"), x: 1.7 },
  372. { id: 4, page: "payments", content: t("PAGAMENTOS"), x: 2.48 },
  373. { id: 5, page: "faq", content: t("FAQ"), x: 3.06 },
  374. { id: 6, page: "", content: "TUTORIAL", x: 3.06 },
  375. ] as const;
  376. const tabsChange = (page: string) => {
  377. if (page) {
  378. router.replace(`/affiliate/${page}`);
  379. } else {
  380. setVisible(true);
  381. }
  382. };
  383. return (
  384. <div
  385. className={`layout-tabs relative flex h-[0.4rem] items-center justify-between text-[0.13rem]`}
  386. >
  387. <Tabs
  388. onChange={tabsChange}
  389. stretch={true}
  390. style={{
  391. "--active-line-color": "#ff6a01",
  392. "--active-title-color": "#ff6a01",
  393. "--title-font-size": "0.11rem",
  394. }}
  395. activeKey={activeTab}
  396. >
  397. {tabs.map((tab) => {
  398. return (
  399. <Tabs.Tab
  400. key={tab.page}
  401. title={tab.content}
  402. className={"text-[grey]"}
  403. ></Tabs.Tab>
  404. );
  405. })}
  406. </Tabs>
  407. <CommissionModel visible={visible} setVisible={setVisible} />
  408. </div>
  409. );
  410. };
  411. export default App;